int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize) {
    int curSum = 0;     // step 1# 当前从起点到当前站的剩余油量累计值
    int totalSum = 0;   // step 2# 所有站点的油量-消耗总和（判断是否可行）
    int start = 0;      // step 3# 起始站点位置

    // step 4# 遍历所有加油站，计算每一站的油差，并做判断
    for(int i = 0; i < gasSize; ++i) {
        // step 4.1# 当前站点加油与消耗的差值
        int diff = gas[i] - cost[i];

        curSum += diff;    // step 4.2# 更新当前路径累计剩余油量
        totalSum += diff;  // step 4.3# 更新全局油量差，用于最后判断可不可绕行一圈

        // step 4.4# 如果当前路径油量不足，说明当前start点不可行
        if(curSum < 0) {
            curSum = 0;         // step 4.5# 清空当前累计油量
            start = i + 1;      // step 4.6# 尝试从下一个站点重新开始
        }
    }

    // step 5# 如果总油量差小于0，无论从哪出发都绕不完一圈
    if(totalSum < 0)
        return -1;

    // step 6# 返回可行的起点位置
    return start;
}
